﻿using System;
using System.Collections.Generic;
using System.Linq;

namespace CRM.Database.Model
{
    public class AgreementElementsCollection : AbstractCollection
    {
        private static List<AgreementElements> _list;

        public List<AgreementElements> AgreementElementsList
        {
            get
            {
                //if(_list==null)
                //    _list = DB.Entities.AgreementElements.ToList();
                //return _list;
                return Entities.AgreementElements.ToList();
            }
        }

        #region Overrides of AbstractCollection

        /// <summary>
        /// Получение списка элементов
        /// </summary>
        /// <returns>Список элементов</returns>
        public override List<object> GetList()
        {
            return new List<object>(AgreementElementsList);
        }

        /// <summary>
        /// Получение типа текущего элемента
        /// </summary>
        /// <returns></returns>
        protected override Type GetItemType()
        {
            return typeof (AgreementElements);
        }

        /// <summary>
        /// Получение статического списка для хранения объектов
        /// </summary>
        /// <returns></returns>
        public override object GetStaticCollection()
        {
            return _list;
        }

        /// <summary>
        /// Получение элемента из коллекции по идентификатору
        /// </summary>
        /// <param name="itemId">Идентификатор</param>
        /// <returns>Элемент</returns>
        public override object GetItemById(int itemId)
        {
            return Entities.AgreementElements.Find(itemId);
        }

        /// <summary>
        /// Обнуление статической коллекции
        /// </summary>
        protected override void SetStaticListToNULL()
        {
            _list = null;
        }

        #endregion

        /// <summary>
        /// Обновление элемента в коллекции
        /// </summary>
        /// <param name="item">Новый элемент</param>
        /// <param name="userLogin">Логин пользователя, который делает изменения</param>
        /// <returns>Результат операции</returns>
        public new bool Update(object item, string userLogin)
        {
            var newObject = (AgreementElements) item;
            if (newObject == null)
                return false;


            var object4Update = GetItemByIdFromDatabase(newObject.GetKeyValue()) as AgreementElements;
            if (object4Update == null)
                return false;

            if (!string.IsNullOrEmpty(newObject.BIK))
                object4Update.BIK = newObject.BIK;

            if (!string.IsNullOrEmpty(newObject.Bank))
                object4Update.Bank = newObject.Bank;

            if (!string.IsNullOrEmpty(newObject.FIOGenDir))
                object4Update.FIOGenDir = newObject.FIOGenDir;

            if (!string.IsNullOrEmpty(newObject.FIOGenDirInRP))
                object4Update.FIOGenDirInRP = newObject.FIOGenDirInRP;

            if (!string.IsNullOrEmpty(newObject.FIOGenDirInRPShort))
                object4Update.FIOGenDirInRPShort = newObject.FIOGenDirInRPShort;

            if (!string.IsNullOrEmpty(newObject.FIOGenDirShort))
                object4Update.FIOGenDirShort = newObject.FIOGenDirShort;

            if (!string.IsNullOrEmpty(newObject.FullAddress))
                object4Update.FullAddress = newObject.FullAddress;


            if (!string.IsNullOrEmpty(newObject.INN))
                object4Update.INN = newObject.INN;


            object4Update.IdLegalEntity = newObject.IdLegalEntity;


            if (!string.IsNullOrEmpty(newObject.KPP))
                object4Update.KPP = newObject.KPP;

            if (!string.IsNullOrEmpty(newObject.KS))
                object4Update.KS = newObject.KS;

            if (!string.IsNullOrEmpty(newObject.OGRN))
                object4Update.OGRN = newObject.OGRN;

            if (!string.IsNullOrEmpty(newObject.PostIndex))
                object4Update.PostIndex
                    = newObject.PostIndex;

            if (!string.IsNullOrEmpty(newObject.RS))
                object4Update.RS = newObject.RS;

            object4Update.IsActive = newObject.IsActive;


            return base.Update(item, userLogin);
        }


        public int GetIdAgreementElementByIdLegalEntity(int idLegalEntity)
        {
            AgreementElements item = Entities.AgreementElements.FirstOrDefault(c => c.IdLegalEntity == idLegalEntity);
            if (item != null)
                return item.IdAgreementElement;
            return 0;
        }
    }
}